package com.symaster.gameengine.moba;

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public abstract class MoveManager extends KeyAdapter {
    boolean KEY_W = false;
    boolean KEY_A = false;
    boolean KEY_S = false;
    boolean KEY_D = false;

    @Override
    public void keyPressed(KeyEvent e) {
        if (e.getKeyCode() == 83) {
            KEY_S = true;
        }
        if (e.getKeyCode() == 65) {
            KEY_A = true;
        }
        if (e.getKeyCode() == 87) {
            KEY_W = true;
        }
        if (e.getKeyCode() == 68) {
            KEY_D = true;
        }
        keyUpdate();
    }

    @Override
    public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == 83) {
            KEY_S = false;
        }
        if (e.getKeyCode() == 65) {
            KEY_A = false;
        }
        if (e.getKeyCode() == 87) {
            KEY_W = false;
        }
        if (e.getKeyCode() == 68) {
            KEY_D = false;
        }
        keyUpdate();
    }

    public void keyUpdate() {
        int count = 0;
        if (KEY_W) {
            count++;
        }
        if (KEY_A) {
            count++;
        }
        if (KEY_S) {
            count++;
        }
        if (KEY_D) {
            count++;
        }
        if (count >= 3) {
            stop();
            return;
        }
        if (count <= 0) {
            stop();
            return;
        }
        if (KEY_W && KEY_S) {
            stop();
            return;
        }
        if (KEY_A && KEY_D) {
            stop();
            return;
        }

        start(getAngle());
    }

    abstract void start(float angle);

    abstract void stop();

    private float getAngle() {
        float angle;
        if (KEY_W && KEY_A) {
            angle = 315f;
        } else if (KEY_W && KEY_D) {
            angle = 45f;
        } else if (KEY_S && KEY_A) {
            angle = 225f;
        } else if (KEY_S && KEY_D) {
            angle = 135f;
        } else if (KEY_W) {
            angle = 0f;
        } else if (KEY_S) {
            angle = 180f;
        } else if (KEY_A) {
            angle = 270f;
        } else if (KEY_D) {
            angle = 90f;
        } else {
            angle = 0;
        }
        return angle;
    }
}